package mtt.us.client.views.index;

import mtt.us.client.events.GetModelDataEvent;
import mtt.us.client.events.ShowFachbereichViewEvent;
import mtt.us.client.events.ShowIndexViewEvent;
import mtt.us.client.views.fachbereich.FachbereichController;
import mtt.us.client.views.fachbereich.FachbereichModel;
import mtt.us.client.views.fachbereich.FachbereichView;
import mtt.us.client.views.fachbereich.events.ShowStudiengaengeEvent;
import mtt.us.client.views.fachbereich.matrikel.MatrikelController;
import mtt.us.client.views.fachbereich.matrikel.MatrikelModel;
import mtt.us.client.views.fachbereich.matrikel.MatrikelView;
import mtt.us.client.views.fachbereich.matrikel.events.ShowMatrikelViewEvent;
import mtt.us.client.views.fachbereich.studiengang.events.ShowMatrikelEvent;
import mtt.us.dto.FachbereichDTO;
import mtt.us.dto.StudiengangDTO;
import mtt.us.hmvcFramework.client.hmvc.controller.GuiController;
import mtt.us.hmvcFramework.client.hmvc.events.AddViewEvent;
import hmvc4gwt.client.event.HmvcEvent;

public class IndexController extends GuiController {
	
	public void doInitImpl() {
		
		register(ShowIndexViewEvent.class, this);
		
		/*
		 * Hyperlink-Navigation 
		 */
		register(ShowStudiengaengeEvent.class, this);
		register(ShowMatrikelEvent.class, this);
	}

	public void handleEventImpl(HmvcEvent event) {
		
		if (event instanceof ShowIndexViewEvent) {
			
			fireLocalEvent(new GetModelDataEvent());
			
			fireEvent(new AddViewEvent(getView()), true, false, false);
			
		} else if (event instanceof ShowStudiengaengeEvent) {
			
			showStudiedengnaenge((FachbereichDTO) event.getPayload());
			
		} else if (event instanceof ShowMatrikelEvent) {
			
			ShowMatrikelEvent showMatrikelEvent = (ShowMatrikelEvent) event;
			
			showMatrikel(showMatrikelEvent.getStudiengang());
		}
		
	}

	/**
	 * Zeigt alle Matrikel des Studiengangs an
	 * @param payload
	 */
	private void showMatrikel(StudiengangDTO studiengang) {
		
		addChildTriad(new MatrikelModel(studiengang), new MatrikelView(), new MatrikelController());
		fireEvent(new ShowMatrikelViewEvent(), false, false, true);
		
	}

	/**
	 * Zeigt die Studiengänge des Fachbereichs an
	 * 
	 * @param fachbereich
	 */
	private void showStudiedengnaenge(FachbereichDTO fachbereich) {
	
		addChildTriad(new FachbereichModel(fachbereich), new FachbereichView(), new FachbereichController());
		fireEvent(new ShowFachbereichViewEvent(), false, false, true);
	}
	
	
}
